home *** CD-ROM | disk | FTP | other *** search
- VERSION 2.00
- Begin Form ApptForm
- BackColor = &H00C0C0C0&
- Caption = "Appointments"
- ClientHeight = 5055
- ClientLeft = 1110
- ClientTop = 1545
- ClientWidth = 7320
- Height = 5460
- Icon = APPTBOOK.FRX:0000
- Left = 1050
- LinkTopic = "Form1"
- ScaleHeight = 5055
- ScaleWidth = 7320
- Top = 1200
- Width = 7440
- Begin PictureBox Panel3D2
- BackColor = &H00C0C0C0&
- FontBold = 0 'False
- FontItalic = 0 'False
- FontName = "MS Sans Serif"
- FontSize = 8.25
- FontStrikethru = 0 'False
- FontUnderline = 0 'False
- ForeColor = &H00800000&
- Height = 1755
- Left = 4500
- ScaleHeight = 1725
- ScaleWidth = 1605
- TabIndex = 12
- Top = 240
- Width = 1635
- Begin PictureBox KindFrame
- BackColor = &H00C0C0C0&
- ForeColor = &H00C0C0C0&
- Height = 675
- Index = 0
- Left = 120
- ScaleHeight = 645
- ScaleWidth = 645
- TabIndex = 16
- Tag = "Phone"
- Top = 300
- Width = 675
- Begin Image KindPict
- Height = 480
- Index = 0
- Left = 90
- Picture = APPTBOOK.FRX:0302
- Top = 90
- Width = 480
- End
- End
- Begin PictureBox KindFrame
- BackColor = &H00C0C0C0&
- ForeColor = &H00C0C0C0&
- Height = 675
- Index = 1
- Left = 120
- ScaleHeight = 645
- ScaleWidth = 645
- TabIndex = 15
- Tag = "Travel"
- Top = 1020
- Width = 675
- Begin Image KindPict
- Height = 480
- Index = 1
- Left = 90
- Picture = APPTBOOK.FRX:0604
- Top = 90
- Width = 480
- End
- End
- Begin PictureBox KindFrame
- BackColor = &H00C0C0C0&
- ForeColor = &H00C0C0C0&
- Height = 675
- Index = 2
- Left = 840
- ScaleHeight = 645
- ScaleWidth = 645
- TabIndex = 14
- Tag = "Meeting"
- Top = 300
- Width = 675
- Begin Image KindPict
- Height = 480
- Index = 2
- Left = 90
- Picture = APPTBOOK.FRX:0906
- Top = 90
- Width = 480
- End
- End
- Begin PictureBox KindFrame
- BackColor = &H00C0C0C0&
- ForeColor = &H00C0C0C0&
- Height = 675
- Index = 3
- Left = 840
- ScaleHeight = 645
- ScaleWidth = 645
- TabIndex = 13
- Tag = "Lunch"
- Top = 1020
- Width = 675
- Begin Image KindPict
- Height = 480
- Index = 3
- Left = 90
- Picture = APPTBOOK.FRX:0C08
- Top = 90
- Width = 480
- End
- End
- End
- Begin PictureBox Panel3D1
- BackColor = &H00C0C0C0&
- ForeColor = &H00C0C0C0&
- Height = 2655
- Left = 4500
- ScaleHeight = 2625
- ScaleWidth = 2745
- TabIndex = 3
- Top = 2280
- Width = 2775
- Begin CommandButton SaveButton
- Caption = "Save"
- Default = -1 'True
- FontBold = 0 'False
- FontItalic = 0 'False
- FontName = "MS Sans Serif"
- FontSize = 8.25
- FontStrikethru = 0 'False
- FontUnderline = 0 'False
- Height = 375
- Left = 120
- TabIndex = 10
- Top = 780
- Width = 735
- End
- Begin TextBox ApptText
- BackColor = &H00FFFFFF&
- ForeColor = &H00000000&
- Height = 1275
- Left = 120
- MultiLine = -1 'True
- TabIndex = 8
- Top = 1260
- Width = 2535
- End
- Begin PictureBox ApptTime
- BackColor = &H00C0C0C0&
- FontBold = 0 'False
- FontItalic = 0 'False
- FontName = "MS Sans Serif"
- FontSize = 8.25
- FontStrikethru = 0 'False
- FontUnderline = 0 'False
- ForeColor = &H00800000&
- Height = 315
- Left = 1500
- ScaleHeight = 285
- ScaleWidth = 1125
- TabIndex = 6
- Top = 840
- Width = 1155
- End
- Begin TextBox ApptType
- BackColor = &H00C0C0C0&
- FontBold = 0 'False
- FontItalic = 0 'False
- FontName = "MS Sans Serif"
- FontSize = 8.25
- FontStrikethru = 0 'False
- FontUnderline = 0 'False
- ForeColor = &H00800000&
- Height = 285
- Left = 1500
- TabIndex = 5
- Top = 480
- Width = 1155
- End
- Begin Image Image1
- Height = 480
- Left = 1140
- Picture = APPTBOOK.FRX:0F0A
- Top = 60
- Width = 480
- End
- Begin Label Label2
- Alignment = 1 'Right Justify
- BackColor = &H00C0C0C0&
- Caption = "When:"
- FontBold = 0 'False
- FontItalic = 0 'False
- FontName = "MS Sans Serif"
- FontSize = 8.25
- FontStrikethru = 0 'False
- FontUnderline = 0 'False
- Height = 255
- Left = 900
- TabIndex = 7
- Top = 840
- Width = 555
- End
- Begin Label Label1
- Alignment = 1 'Right Justify
- BackColor = &H00C0C0C0&
- Caption = "Appointment type:"
- FontBold = 0 'False
- FontItalic = 0 'False
- FontName = "MS Sans Serif"
- FontSize = 8.25
- FontStrikethru = 0 'False
- FontUnderline = 0 'False
- Height = 195
- Left = 120
- TabIndex = 4
- Top = 480
- Width = 1335
- End
- End
- Begin Timer GridTimer
- Enabled = 0 'False
- Interval = 100
- Left = 1260
- Top = 3780
- End
- Begin PictureBox ApptList
- BackColor = &H0080FFFF&
- Height = 2715
- Left = 120
- ScaleHeight = 2685
- ScaleWidth = 4245
- TabIndex = 0
- Top = 120
- Width = 4275
- End
- Begin Image TrashCan
- Height = 480
- Left = 6480
- Picture = APPTBOOK.FRX:120C
- Top = 900
- Width = 480
- End
- Begin Image TrashOpened
- Height = 480
- Left = 1740
- Picture = APPTBOOK.FRX:150E
- Top = 4380
- Visible = 0 'False
- Width = 480
- End
- Begin Image TrashClosed
- Height = 480
- Left = 1260
- Picture = APPTBOOK.FRX:1810
- Top = 4380
- Visible = 0 'False
- Width = 480
- End
- Begin Label DragArrow
- Caption = "DragArrow"
- DragIcon = APPTBOOK.FRX:1B12
- Height = 255
- Left = 180
- TabIndex = 11
- Top = 4680
- Visible = 0 'False
- Width = 915
- End
- Begin Label MoveIcon
- Caption = "MoveIcon"
- DragIcon = APPTBOOK.FRX:1E14
- Height = 255
- Left = 180
- TabIndex = 9
- Top = 4380
- Visible = 0 'False
- Width = 915
- End
- Begin Label SaveIcon
- Caption = "SaveIcon"
- Height = 255
- Left = 180
- TabIndex = 2
- Top = 4080
- Visible = 0 'False
- Width = 915
- End
- Begin Label NoDrag
- Caption = "NoDrag"
- DragIcon = APPTBOOK.FRX:2116
- Height = 255
- Left = 180
- TabIndex = 1
- Top = 3780
- Visible = 0 'False
- Width = 915
- End
- ' Variables used to manage grid
- Dim IgnoreRowChange As Integer
- Dim GridInvertRect As RECT
- Dim GridInverted As Integer
- Dim GridDropRow As Integer
- ' Drag mode constants to keep track of dragging activity.
- Dim DragType As Integer ' type of object being dragged
- Dim Dragging As Integer ' TRUE when dragging is in progress
- Dim DragIndex As Integer ' Optional index of dragged obj
- Dim DragRow As Integer ' Optional row being dragged in grid
- ' Miscellaneous variables
- Dim valid% ' used as return for DragValid
- ' Bitmasks to describe valid drag objects
- Const MASK_NEWAPPT = 1 ' a new appointment
- Const MASK_OLDAPPT = 2 ' an old appointment
- Const MASK_NONE = 0 ' mask used where no drops are allowed
- Function ApiRectFromPoint (ctl As Grid, X As Single, Y As Single, r As RECT) As Integer
- ' Given a grid control and a coordinate position, this routine
- ' returns a Windows RECT structure containing the pixel
- ' coordinates of the row being pointed at. The row number is
- ' returned, or -1, indicating that no row is being pointed at.
- Dim curRow As Integer
- Dim totHeight As Single
- Dim topLocation As Single
- ' Loop through each row, accumulating row height until we reach
- ' the row containing the point.
- For curRow = 0 To ctl.Rows - 1
- topLocation = totHeight
- totHeight = totHeight + ctl.RowHeight(curRow) + Screen.TwipsPerPixelY
-
- If Y < totHeight Then
- ' Convert the twips values into pixel coordinates
- ApiRectFromPoint = curRow
- r.top = topLocation / Screen.TwipsPerPixelY
- r.bottom = totHeight / Screen.TwipsPerPixelY
- r.left = 0
- r.right = ctl.Width / Screen.TwipsPerPixelY
- Exit Function
- End If
- Next curRow
- ApiRectFromPoint = -1 ' indicate failure
- End Function
- Sub ApptEdit ()
- ' This subroutine moves the data in the current grid row into
- ' the "post-it" editing area.
- Dim aText As String
- Dim colonPos As Integer
- ' This routine copies appointment data to the edit window
- ApptList.Col = 1
- aText = ApptList.Text
- colonPos = InStr(aText, ":")
- ' If no colon, there's no appointment, so clear the post-it
- ' area. If there is a colon, fill in the information.
- If colonPos = 0 Then
- ApptText.Text = ""
- ApptTime.Text = Format$(0, ApptTime.Format)
- ApptType.Text = ""
- Else
- ApptType.Text = Left$(aText, colonPos - 1)
- ApptText.Text = Mid$(aText, colonPos + 2)
- ApptList.Col = 0
- ApptTime.Text = Format$(ApptList.Text, ApptTime.Format)
- End If
- End Sub
- Sub ApptList_DragDrop (Source As Control, X As Single, Y As Single)
- ' Drop a new appointment or existing appointment at a new
- ' row position.
- Dim aText As String
- Dim i%
- If Not EndDragMode(MASK_NEWAPPT Or MASK_OLDAPPT) Then Exit Sub
- UnhighlightRow
- IgnoreRowChange = True
- If DragType = MASK_NEWAPPT Then
- ApptList.Col = 1
- ApptList.Row = GridDropRow
- ApptList.Text = Source.Tag & ": "
- ApptEdit
- Else
- ApptList.Col = 0
- ApptList.Row = GridDropRow
- aText = ApptList.Text
- ApptList.Row = DragRow
- i% = ChangeApptTime(TimeValue(aText))
- End If
- IgnoreRowChange = False
- ApptText.SetFocus
- End Sub
- Sub ApptList_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- ' When dragging over the grid, both new and old appointments
- ' are considered. For both cases, we unhighlight the current
- ' destination row upon leaving the drop zone, and assure that
- ' the row under the point is highlighted otherwise.
- If Not DragValid(Source, MASK_NEWAPPT Or MASK_OLDAPPT, State) Then
- Exit Sub
- End If
- Select Case State
- Case LEAVE
- UnhighlightRow
- Case Else
- GridDropRow = HighlightRowAtPoint(X, Y)
- End Select
- End Sub
- Sub ApptList_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
- ' We take charge of the mouse down event to initiate dragging
- ' ourselves. First, the cursor must be in column 1. Next,
- ' the row must contain a valid appointment to be grabbed
- ' (identified by the presence of a colon in the cell).
- If AtGridCol(ApptList, X, Y) > 0 Then
- If InStr(ApptList.Text, ":") <> 0 Then
- ' The timer will now count down. This allows the user
- ' to easily click, or "press" the mouse. The Timer
- ' event handles the drag initialization.
- GridTimer.Enabled = True
- End If
- End If
- End Sub
- Sub ApptList_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
- ' Be sure the timer is disabled so that a click doesn't
- ' initiate a drag. If it's already disabled, it doesn't matter.
- GridTimer.Enabled = False
- End Sub
- Sub ApptList_RowColChange ()
- ' Whenever the row changes, move the highlight to track the
- ' current cell.
- ApptList.SelStartRow = ApptList.Row
- ApptList.SelEndRow = ApptList.Row
- ' IgnoreRowChange means that we're setting Col or Row somewhere
- ' else in the code and we don't want ApptEdit to be called.
- ' Otherwise, the user changed the row and we update the
- ' "post-it" area.
- If Not IgnoreRowChange Then
- IgnoreRowChange = True
- ApptEdit
- IgnoreRowChange = False
- End If
- End Sub
- Sub ApptText_DragDrop (Source As Control, X As Single, Y As Single)
- valid% = EndDragMode(MASK_NONE)
- End Sub
- Sub ApptText_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NONE, State)
- End Sub
- Sub ApptTime_DragDrop (Source As Control, X As Single, Y As Single)
- valid% = EndDragMode(MASK_NONE)
- End Sub
- Sub ApptTime_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NONE, State)
- End Sub
- Sub ApptTime_ValidationError (InvalidText As String, StartPosition As Integer)
- MsgBox "Invalid time"
- ApptTime.SetFocus
- End Sub
- Sub ApptType_DragDrop (Source As Control, X As Single, Y As Single)
- ' Accept a drop only for a NEWAPPT icon, otherwise the
- ' operation will be cancelled.
- If EndDragMode(MASK_NEWAPPT) Then
- ApptType.Text = Source.Tag
- End If
- End Sub
- Sub ApptType_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NEWAPPT, State)
- End Sub
- Sub ApptType_KeyPress (KeyAscii As Integer)
- ' Don't allow a colon to be entered, since we use a colon to
- ' separate the appointment "kind" from the text.
- If KeyAscii = Asc(":") Then
- Beep
- KeyAscii = 0
- End If
- End Sub
- Function AtGridCol (ctl As Control, X As Single, Y As Single)
- ' Given a point on a grid control, in twips, this routine
- ' returns the column number where the point is located, or
- ' -1 indicating the point is outside the grid.
- Dim curCol As Integer
- Dim totWidth As Single
- ' Loop through each column, accumulating column width until we
- ' reach the column containing the point.
- For curCol = 0 To ctl.Cols - 1
-
- totWidth = totWidth + ctl.ColWidth(curCol) + Screen.TwipsPerPixelX
-
- If X < totWidth Then
- AtGridCol = curCol
- Exit Function
- End If
- Next curCol
- AtGridCol = -1 ' not found
- End Function
- Sub BeginDragMode (ctl As Control, objType As Integer)
- ' Whenever a drag is about to start, this routine is called.
- ' The type mask of the drag is flagged, and we remember that
- ' dragging is in progress. This routine MUST be matched
- ' by an EndDragMode function call.
- DragType = objType
- Dragging = True
- ' Start the drag process
- ctl.Drag BEGIN_DRAG
- End Sub
- Function ChangeApptTime (newtime As Variant) As Integer
- ' Given a new time for an appointment at the current row, this
- ' routine moves the appointment to the new location in the
- ' grid.
- Dim trow As Integer
- Dim oldAppt As String
- trow = TimeRow(newtime)
- ' If we're already there, then do nothing and return False,
- ' indicating no row change occurred.
- If trow = ApptList.Row Then
- ChangeApptTime = False
- Exit Function
- End If
- ChangeApptTime = True
- IgnoreRowChange = True
- ' Actually move the row.
- ApptList.Col = 1
- oldAppt = ApptList.Text
- ApptList.Text = ""
- ApptList.Row = trow
- ApptList.Text = oldAppt
- ApptEdit ' move the data to the post-it area
- IgnoreRowChange = False
- End Function
- Function DragValid (src As Control, mask As Integer, State As Integer) As Integer
- ' This function is called by an object's DragOver event to
- ' automatically change the drag cursor to the "no drop"
- ' cursor if necessary. It also returns True if the object
- ' can legally be dropped according to the input mask.
- If (mask And DragType) Then
- DragValid = True
- Exit Function
- End If
- ' This is not a valid drag. Return False, but also change the
- ' object's drag icon to the NoDrag icon (remembering the old
- ' value for later restore when we exit this object).
- DragValid = False
- Select Case State
-
- Case ENTER
- ' Entering, remember old icon
- SaveIcon.DragIcon = src.DragIcon
- src.DragIcon = NoDrag.DragIcon
- Case LEAVE
-
- ' Exiting, restore old icon
- src.DragIcon = SaveIcon.DragIcon
- End Select
-
- End Function
- Function EndDragMode (mask As Integer) As Integer
- ' This function is called when a drag has ended, either
- ' successfully or unsuccessfully. This routine removes any
- ' user feedback related to the drag operation and returns
- ' TRUE if the passed mask matches the dragged object.
- Select Case DragType
- Case MASK_NEWAPPT
- ' If a "new appointment" icon was dragged, change the
- ' frame background to LTGREY again so that the drag
- ' is officially over.
- KindFrame(DragIndex).BackColor = LTGREY
- Case MASK_OLDAPPT
- ' If this is an item dragged from the grid, refresh
- ' the grid in case the drag ended outside the grid
- ' frame (and the inverted row remains).
- ApptList.Refresh
- End Select
- Dragging = False
- EndDragMode = (mask And DragType) <> 0
- End Function
- Sub Form_DragDrop (Source As Control, X As Single, Y As Single)
- ' Ignore drops which occur on the form
- valid% = EndDragMode(MASK_NONE)
- End Sub
- Sub Form_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- ' Assure that the "no drop" icon is displayed when passing
- ' over the form.
- valid% = DragValid(Source, MASK_NONE, State)
- End Sub
- Sub Form_Load ()
- Dim curTime As Variant
- Dim curRow As Integer
- Dim rowMax As Integer
- ' Initialize the grid column widths, and set the height of
- ' the list so it displays all times entered.
- rowMax = (Prefs.timeEnd - Prefs.timeStart) / Prefs.timeIncrement
- ApptList.ColWidth(0) = ApptForm.TextWidth("XX:XX XX")
- ApptList.ColWidth(1) = ApptList.Width - ApptList.ColWidth(0)
- ApptList.Height = (ApptList.RowHeight(0) + Screen.TwipsPerPixelY) * rowMax
- IgnoreRowChange = True
- ApptList.Rows = rowMax
- ApptList.Col = 0
- ' Fill the leftmost column with appointment times.
- For curTime = Prefs.timeStart To Prefs.timeEnd Step Prefs.timeIncrement
- ApptList.Row = curRow
- ApptList.Text = Format$(curTime, "hh:mm am/pm")
- curRow = curRow + 1
- Next curTime
- IgnoreRowChange = False
- ApptList.Row = 0
- End Sub
- Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
- ' Since we can't trap a "drop" which occurs outside of our
- ' application, this is a pretty good solution. Whenever the
- ' cursor passes over the form, if we're still dragging check
- ' to see if the button is now up. If so, just cancel the
- ' operation
- If Dragging Then
- If (Button And LEFT_BUTTON) = 0 Then
- valid% = EndDragMode(MASK_NONE)
- End If
- End If
- End Sub
- Sub GridTimer_Timer ()
- ' When the timer is triggered, the user has been holding the
- ' mouse down over a grid row for a "press" duration. Now,
- ' initiate a drag operation.
- ' Reset the column to the one with the text in it.
- IgnoreRowChange = True
- ApptList.Col = 1
- IgnoreRowChange = False
- ' Indicate we're doing an "old appointment" drag.
- DragRow = ApptList.Row
- ApptList.DragIcon = MoveIcon.DragIcon
- BeginDragMode ApptList, MASK_OLDAPPT
- GridTimer.Enabled = False
- End Sub
- Function HighlightRowAtPoint (X As Single, Y As Single) As Integer
- ' If the ApplList grid was highlighted (according to the
- ' GridInverted variable), then unhighlight the old location and
- ' highlight the new one. Instead of a row number, a point within
- ' the grid is passed. The row number is returned, or -1, meaning
- ' that the point was outside the grid.
- Dim newrect As RECT
- Dim rownum As Integer
- Dim gridDC As Integer
- rownum = ApiRectFromPoint(ApptList, X, Y, newrect)
- HighlightRowAtPoint = rownum
- ' Don't rehighlight the current row, just exit.
- If rownum >= 0 And GridInverted And newrect.top = GridInvertRect.top Then Exit Function
- ' Use the Windows API call InvertRect to invert the row we're
- ' passing above.
- gridDC = GetDC(ApptList.hWnd)
- If GridInverted Then InvertRect gridDC, GridInvertRect
- GridInverted = True
- If rownum >= 0 Then
- GridInvertRect = newrect
- InvertRect gridDC, GridInvertRect
- GridInverted = True
- Else
- GridInverted = False
- End If
- gridDC = ReleaseDC(ApptList.hWnd, gridDC)
- End Function
- Sub Image1_DragDrop (Source As Control, X As Single, Y As Single)
- valid% = EndDragMode(MASK_NONE)
- End Sub
- Sub Image1_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NONE, State)
- End Sub
- Sub KindFrame_DragDrop (Index As Integer, Source As Control, X As Single, Y As Single)
- valid% = EndDragMode(MASK_NONE)
- End Sub
- Sub KindFrame_DragOver (Index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NEWAPPT, State)
- End Sub
- Sub KindPict_DragDrop (Index As Integer, Source As Control, X As Single, Y As Single)
- valid% = EndDragMode(MASK_NONE)
- End Sub
- Sub KindPict_DragOver (Index As Integer, Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NEWAPPT, State)
- End Sub
- Sub KindPict_MouseDown (Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
- ' When the left button goes down over an "appointment type"
- ' icon, drag its image in NEWAPPT mode. Copy the DragIcon
- ' each time, since it may still be set to the "no drop" icon
- ' from a previous cancellation.
- If Button And LEFT_BUTTON Then
- KindFrame(Index).DragIcon = DragArrow.DragIcon
- BeginDragMode KindFrame(Index), MASK_NEWAPPT
- KindFrame(Index).BackColor = CYAN
-
- ' Save the index, we'll need it in EndDragMode
- DragIndex = Index
- End If
- End Sub
- Sub Label1_DragDrop (Source As Control, X As Single, Y As Single)
- valid% = EndDragMode(MASK_NONE)
- End Sub
- Sub Label1_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NONE, State)
- End Sub
- Sub Label2_DragDrop (Source As Control, X As Single, Y As Single)
- valid% = EndDragMode(MASK_NONE)
- End Sub
- Sub Label2_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NONE, State)
- End Sub
- Sub Panel3D1_DragDrop (Source As Control, X As Single, Y As Single)
- valid% = EndDragMode(MASK_NONE)
- End Sub
- Sub Panel3D1_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NONE, State)
- End Sub
- Sub SaveButton_Click ()
- ' Save all data in the post-it area to the grid.
- Dim i%
- IgnoreRowChange = True
- ApptList.Col = 1
- ' We can only save if there's an appointment on the current
- ' grid row already (at least a blank one).
- If InStr(ApptList.Text, ":") = 0 Then
- MsgBox "No appointment at current row"
- Exit Sub
- End If
- ApptList.Text = ApptType.Text & ": " & ApptText.Text
- IgnoreRowChange = False
- ' If the time was changed manually, then move the row to the new
- ' location.
- i% = ChangeApptTime(TimeValue(ApptTime.Text))
- End Sub
- Sub SaveButton_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- valid% = DragValid(Source, MASK_NONE, State)
- End Sub
- Function TimeRow (thetime As Variant) As Integer
- ' Given a time value, return the row number within the grid
- ' where the specified time slot is located.
- TimeRow = (thetime - Prefs.timeStart) / Prefs.timeIncrement
- End Function
- Sub TrashCan_DragDrop (Source As Control, X As Single, Y As Single)
- ' The trash can only accepts drops for "old appointments" from
- ' the grid.
- If EndDragMode(MASK_OLDAPPT) Then
- ' Get rid of feedback
- TrashCan.Picture = TrashClosed.Picture
- ' Clear the grid row and update the post-it area
- IgnoreRowChange = True
-
- ApptList.Row = DragRow
- ApptList.Col = 1
- ApptList.Text = ""
- ApptEdit
- ApptList.SetFocus
- IgnoreRowChange = False
- End If
- End Sub
- Sub TrashCan_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
- ' Provide feedback by "opening the trashcan" whenever an
- ' old appointment is dragged over the trash.
- If DragValid(Source, MASK_OLDAPPT, State) Then
- Select Case State
- Case ENTER
- ' Open when entering
- TrashCan.Picture = TrashOpened.Picture
- Case LEAVE
- ' Close when leaving
- TrashCan.Picture = TrashClosed.Picture
- End Select
- End If
- End Sub
- Sub UnhighlightRow ()
- ' If the ApptList grid is highlighted (according to the
- ' GridInverted flag), then unhighlight it, otherwise do
- ' nothing.
- Dim gridDC As Integer
- If Not GridInverted Then Exit Sub
- ' Use the invert rectangle saved by HighlightRowAtPoint
- gridDC = GetDC(ApptList.hWnd)
- InvertRect gridDC, GridInvertRect
- gridDC = ReleaseDC(ApptList.hWnd, gridDC)
- GridInverted = False
- End Sub
-